package cn.wolfcode.shop.service.impl;

import cn.wolfcode.shop.domain.SkuProperty;
import cn.wolfcode.shop.domain.SkuPropertyValue;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by wolfcode on 2018/8/18.
 */
public class SkuTest {
    public static void main(String[] args) {
        List<SkuPropertyValue> skuPropertyValueList = getData();
        Map<Long,List<SkuPropertyValue>> map = new HashMap<>();
        List<SkuPropertyValue> skuPropertyValues;
        for(SkuPropertyValue spv:skuPropertyValueList){
            skuPropertyValues = map.get(spv.getSkuPropertyId());
            if(skuPropertyValues==null){
                skuPropertyValues = new ArrayList<>();
                map.put(spv.getSkuPropertyId(),skuPropertyValues);
            }
            skuPropertyValues.add(spv);
        }

        //===============================================================
        List<List<SkuPropertyValue>> sourceData = new ArrayList(map.values());
        List<List<SkuPropertyValue>> targetData = new ArrayList<>();
        recursionGenerateSku(sourceData,targetData,0,new ArrayList<>());
        System.out.println(targetData);
    }

    /**
     *
     * @param sourceData 源数据
     * @param targetData 目标数据集合
     * @param level      递归的层数
     * @param appendData 需要往下一层传递的参数
     */
     public static void recursionGenerateSku(List<List<SkuPropertyValue>> sourceData,
                                            List<List<SkuPropertyValue>> targetData,
                                            int level,
                                            List<SkuPropertyValue> appendData){
        //判断是否最后一层的数据
        if(level<sourceData.size()-1){
            //不是最后一层
            List<SkuPropertyValue> innerSkuPropertyValueList = sourceData.get(level);
            for(SkuPropertyValue spv:innerSkuPropertyValueList){
                List<SkuPropertyValue> innerAppendData = new ArrayList<>(appendData);
                innerAppendData.add(spv);
                recursionGenerateSku(sourceData,targetData,level+1,innerAppendData);
            }
        }else{
            //是最后一层
            List<SkuPropertyValue> innerSkuPropertyValueList = sourceData.get(level);
            for(SkuPropertyValue spv:innerSkuPropertyValueList){
                List<SkuPropertyValue> innerAppendData = new ArrayList<>(appendData);
                innerAppendData.add(spv);
                targetData.add(innerAppendData);
            }
        }
    }
















    public static List<SkuPropertyValue> getData(){
        List<SkuPropertyValue> skuPropertyValueList = new ArrayList<>();
        SkuPropertyValue sku1 = new SkuPropertyValue();
        sku1.setSkuPropertyId(7L);
        sku1.setValue("黑色");
        skuPropertyValueList.add(sku1);
        SkuPropertyValue sku2 = new SkuPropertyValue();
        sku2.setSkuPropertyId(7L);
        sku2.setValue("白色");
        skuPropertyValueList.add(sku2);
        SkuPropertyValue sku3 = new SkuPropertyValue();
        sku3.setSkuPropertyId(7L);
        sku3.setValue("银色");
        skuPropertyValueList.add(sku3);
        SkuPropertyValue sku4 = new SkuPropertyValue();
        sku4.setSkuPropertyId(8L);
        sku4.setValue("中国移动4G");
        skuPropertyValueList.add(sku4);
        SkuPropertyValue sku5 = new SkuPropertyValue();
        sku5.setSkuPropertyId(8L);
        sku5.setValue("中国联通4G");
        skuPropertyValueList.add(sku5);
        SkuPropertyValue sku6 = new SkuPropertyValue();
        sku6.setSkuPropertyId(8L);
        sku6.setValue("中国电信4G");
        skuPropertyValueList.add(sku6);
        SkuPropertyValue sku7 = new SkuPropertyValue();
        sku7.setSkuPropertyId(9L);
        sku7.setValue("64G");
        skuPropertyValueList.add(sku7);
        SkuPropertyValue sku8 = new SkuPropertyValue();
        sku8.setSkuPropertyId(9L);
        sku8.setValue("128G");
        skuPropertyValueList.add(sku8);
        return skuPropertyValueList;
    }
}
